#include <iostream>
using namespace std;
// 1、高阶函数
template <typename F, typename G>
auto comb(F f, G g)
{
    return [=](int x)
    { return f(g(x)); };
}
template<typename F, typename G>
auto operator*(F f, G g) {
    return [=](int x) { return f(g(x)); };
}
int f(int x) { return x + 1; }
auto g = [](int x) { return x +1; };

int main()
{
    cout << comb(f, f)(3) << endl;
    cout <<(g *g )(3) << endl;
    // lambda 是对象，函数不是对象 ,无法调用
    // cout <<(f *f )(3) << endl;
    return 0;
}
